﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Controller;
using Interfaces;

namespace GUI
{
    public partial class FrmArbejdslogs : Form
    {
        // Atributter
        private LogSystem system;
        
        // Konstruktør
        public FrmArbejdslogs()
        {            
            InitializeComponent();
            system = new LogSystem();
        }

        // Form-load hændelsen
        private void FrmArbejdslogs_Load(object sender, EventArgs e)
        {
            listArbejdslogsUpdate();
            CboProjektUpdate();
            NormalTilstand();
        }

        #region Tilstandsstyrring

        private void NormalTilstand()
        {
            lstArbejdslogs_Arbejdslogs.Enabled = true;
            txtNote_Arbejdslog.Enabled = false;
            btnRedigerNote_Arbejdslog.Visible = true;
            btnGemNote.Visible = false;
            btnFortryd.Visible = false;
            btnAfslutArbejdslog.Visible = true;
            btnTilHovedmenu_Arbejdslog.Visible = true;
            txtArbejdslogID.Enabled = false;

            lblStatusVis_Arbejdslogs.ForeColor = Color.Green;
            lblStatusVis_Arbejdslogs.Text = "Klar.";
        }

        private void RedigerTilstand()
        {
            lstArbejdslogs_Arbejdslogs.Enabled = false;
            txtNote_Arbejdslog.Enabled = true;
            btnRedigerNote_Arbejdslog.Visible = true;
            btnGemNote.Visible = true;
            btnFortryd.Visible = true;
            btnAfslutArbejdslog.Visible = true;
            btnTilHovedmenu_Arbejdslog.Visible = true;
            txtArbejdslogID.Enabled = false;

            lblStatusVis_Arbejdslogs.ForeColor = Color.Green;
            lblStatusVis_Arbejdslogs.Text = "Du kan nu tilføje eller redigére en note.";
        }

        #endregion

        #region updatemetoder
        //metode til at opdatere arbejdslogs listview
        public void listArbejdslogsUpdate()
        {
            lstArbejdslogs_Arbejdslogs.Items.Clear();

            IArbejdslogdata iarbejdslog;
            IEnumerator iarbejdslogIterator = system.GetArbejdslogs();
            iarbejdslogIterator.Reset();

            while (iarbejdslogIterator.MoveNext())
            {
                iarbejdslog = (IArbejdslogdata)iarbejdslogIterator.Current;

                string projektTitel = system.FindArbejdslogsProjektTitel(iarbejdslog.ArbejdslogID);

                ListViewItem line = new ListViewItem();
                
                if (iarbejdslog.Aktiv == true)
                {
                    line.Text = iarbejdslog.ArbejdslogID.ToString();
                    line.SubItems.Add(iarbejdslog.Starttidspunkt.ToShortDateString()+" "+iarbejdslog.Starttidspunkt.ToShortTimeString());
                    line.SubItems.Add(iarbejdslog.Tid.ToString());
                    line.SubItems.Add(projektTitel);
                    if (iarbejdslog.Aktiv == true)
                        line.SubItems.Add("nej");
                    else line.SubItems.Add("ja");
                    lstArbejdslogs_Arbejdslogs.Items.Add(line);
                }           
            }
        }
        // metode til at opdatere listview med arbejdlogs for de enkelte projekter
        public void listArbejdslogsUpdateForEnkelteProjekter()
        {
            lstArbejdslogs_Arbejdslogs.Items.Clear();

            IArbejdslogdata iarbejdslog;
            IEnumerator iarbejdslogIterator = system.GetArbejdslogs();
            iarbejdslogIterator.Reset();

            while (iarbejdslogIterator.MoveNext())
            {
                iarbejdslog = (IArbejdslogdata)iarbejdslogIterator.Current;

                string projektTitel = system.FindArbejdslogsProjektTitel(iarbejdslog.ArbejdslogID);

                ListViewItem line = new ListViewItem();
                if (cboProjekt.SelectedItem.ToString() == projektTitel)
                {
                    line.Text = iarbejdslog.ArbejdslogID.ToString();
                    line.SubItems.Add(iarbejdslog.Starttidspunkt.ToShortDateString() + " " + iarbejdslog.Starttidspunkt.ToShortTimeString());
                    line.SubItems.Add(iarbejdslog.Tid.ToString());
                    line.SubItems.Add(projektTitel);
                    if (iarbejdslog.Aktiv == true)
                        line.SubItems.Add("nej");
                    else line.SubItems.Add("ja");
                    lstArbejdslogs_Arbejdslogs.Items.Add(line);
                }
            }
        }
        // metode til at indlæse projekter til combobox
        private void CboProjektUpdate()
        {
            cboProjekt.Items.Clear();

            IProjektdata iProdata;
            IEnumerator iProjektIterator = system.GetProjekter();
            iProjektIterator.Reset();

            while (iProjektIterator.MoveNext())
            {
                iProdata = (IProjektdata)iProjektIterator.Current;

                cboProjekt.Items.Add(iProdata.Titel.ToString());
            }
        }


        #endregion

        #region Knapper og clicks

        //Gem-knappen der redigerer en note på et arbejdslog objekt
        private void btnGemNote_Click(object sender, EventArgs e)
        {
            int arbejdslogID;
            string note;

            if (txtArbejdslogID.Text == "")
            {
                MessageBox.Show("vælg venligst en arbejdslog");
            }
            arbejdslogID = Convert.ToInt32(txtArbejdslogID.Text);

            note = txtNote_Arbejdslog.Text;

            try
            {
                system.RedigerNote(arbejdslogID, note);
                NormalTilstand();
            }
            catch (Exception)
            {
                MessageBox.Show("Noten kunne ikke redigeres pga en systemfejl.");                
            }     
        }

        // skifter tilstand
        private void btnRedigerNote_Arbejdslog_Click(object sender, EventArgs e)
        {
            RedigerTilstand();
        }

        // skifter tilstand
        private void btnFortryd_Click(object sender, EventArgs e)
        {
            NormalTilstand();
        }

        // Afslut-knappen der redigere aktiv til false på et arbejdslogsobjekt
        private void btnAfslutArbejdslog_Click(object sender, EventArgs e)
        {
            int arbejdslogID = Convert.ToInt32(txtArbejdslogID.Text);
            bool aktiv = false;

            if (MessageBox.Show("Vil du afslutte denne arbejdslog?", "Du er nu ved at afslutte en arbejdslog", MessageBoxButtons.YesNo) == DialogResult.Yes)
            try
            {
                system.RedigerAktiv(arbejdslogID, aktiv);
                listArbejdslogsUpdate();
            }
            catch (Exception)
            {
                MessageBox.Show("Arbejdsloggen kunne ikke afsluttes pga en systemfejl.");
            }
        }

        // gå til hovedmenu
        private void btnTilHovedmenu_Arbejdslog_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        
        // selected index changed på listview
        private void lstArbejdslogs_Arbejdslogs_SelectedIndexChanged(object sender, EventArgs e)
        {
            

            if (lstArbejdslogs_Arbejdslogs.SelectedItems.Count > 0)     // workaround
            {
                IArbejdslogdata iarbejdslog;
                IEnumerator iarbejdslogIterator = system.GetArbejdslogs();
                iarbejdslogIterator.Reset();

                while (iarbejdslogIterator.MoveNext())
                {
                    iarbejdslog = (IArbejdslogdata)iarbejdslogIterator.Current;

                    int selectedIndex = lstArbejdslogs_Arbejdslogs.SelectedIndices[0];   // Vælg første selected index

                    ListViewItem line = lstArbejdslogs_Arbejdslogs.Items[selectedIndex];

                    if (iarbejdslog.ArbejdslogID == Convert.ToInt32(line.Text))
                    {
                        txtNote_Arbejdslog.Text = iarbejdslog.Note.ToString();
                        txtArbejdslogID.Text = line.Text;
                    }
                }
            }
        }       

        // selected index changed på combobox
        private void cboProjekt_SelectedIndexChanged(object sender, EventArgs e)
        {
            listArbejdslogsUpdateForEnkelteProjekter();
        }

        // knap til at vise ikke-afsluttede logs
        private void btnVisAktive_Click(object sender, EventArgs e)
        {
            listArbejdslogsUpdate();
        }
        #endregion
    }
}
